﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;

namespace Persistencia
{
    public class BrMensaje : Broker
    {
        public override void Agregar(OPersistente o)
        {
            Mensaje mensaje = (Mensaje)o;
            String buzon = "";
            if (mensaje.BuzonPadre != null)
            {
                buzon = mensaje.BuzonPadre.Oid;
            }
                    if (mensaje.CarpetaPadre != null)
                    {
                        string sentencia = "INSERT INTO MENSAJE (OID, CARPETAPADRE, ASUNTO, CONTENIDO, LEIDO, OIDBUZON) VALUES (\'" + mensaje.Oid + "\', \'" +
                            mensaje.CarpetaPadre.Oid + "\', \'" + mensaje.Asunto + "\', \'" + mensaje.Contenido + "\', " +
                            mensaje.EstaLeido().ToString() + ", \'" + buzon + "\')";
                        conexion.Ejecutar(sentencia);
                    }
                    else
                    {
                        string sentencia = "INSERT INTO MENSAJE (OID, CARPETAPADRE, ASUNTO, CONTENIDO, LEIDO, OIDBUZON) VALUES (\'" + mensaje.Oid + "\', \'" +
                            "\', \'" + mensaje.Asunto + "\', \'" + mensaje.Contenido + "\', " +
                            mensaje.EstaLeido().ToString() + ", \'" + buzon + "\')";
                        conexion.Ejecutar(sentencia);
                    }
            List<Cuenta> destinatarios = mensaje.Destinatarios;
            if (destinatarios.Count > 0) 
            {
                foreach(Cuenta dest in destinatarios)
                {
                    string sentencia = "INSERT INTO MENSAJEDESTINATARIOS (OIDMENSAJE, OIDDESTINATARIO) VALUES (\'" + mensaje.Oid + "\', \'" +
                        dest.Oid + "\')";
                    conexion.Ejecutar(sentencia);
                }
            }
        }

        public override void Modificar(OPersistente o)
        {
            //Pedido pe = (Pedido)o;
            //string sentencia = "UPDATE PEDIDO SET FECHA_ENTREGA =\'" + pe.FechaEntrega.ToString() + "\' , CLIENTE =" + "\'" + pe.Cliente.Oid +
            //    "\' , PRODUCTO=\'" + pe.Producto.Oid + "\', COMPLETADO=" + pe.Completado.ToString() + ", CANT_UNIDADES_PEDIDAS=" + pe.CantUnidadesPedidas.ToString() + ", FECHA_COMPLETADO=\'" + pe.FechaCompletado.ToString() + "\' WHERE OID = \'" + pe.Oid + "\'";
            //conexion.Ejecutar(sentencia);
        }

        public override void Eliminar(OPersistente o)
        {
            //Pedido pe = (Pedido)o;
            //string sentencia = "UPDATE PEDIDO SET BORRADO = True WHERE OID = \'" + pe.Oid + "\'";
            //conexion.Ejecutar(sentencia);
        }

        public override void TraerDatos(OPersistente o)
        {
            Mensaje mensaje = (Mensaje)o;
            string sentencia = "SELECT * FROM MENSAJE WHERE OID = \'" + mensaje.Oid + "\'";
            conexion.TraerDatos(sentencia);
            conexion.SiguienteRegistro();
            mensaje.Oid = conexion.ObtenerValor(0).ToString();
            mensaje.CarpetaPadre.Oid = conexion.ObtenerValor(1).ToString();
            mensaje.Asunto = conexion.ObtenerValor(2).ToString();
            mensaje.Contenido = conexion.ObtenerValor(3).ToString();
            mensaje.Leido = (Boolean)conexion.ObtenerValor(4);
            conexion.FinConsulta();

            List<Cuenta> destinatarios = new List<Cuenta>();
            sentencia = "SELECT C.* FROM CUENTA C, MENSAJEDESTINATARIOS M" 
                        + " WHERE M.OIDMENSAJE = \'" + mensaje.Oid + "\'"
                        + " AND C.OID = M.OIDDESTINATARIO";
            conexion.TraerDatos(sentencia);
            while (conexion.SiguienteRegistro())
            {
                Cuenta cuenta = new Cuenta();
                cuenta.Oid = conexion.ObtenerValor(0).ToString();
                //cuenta.NombreCuenta = conexion.ObtenerValor(4).ToString();
                destinatarios.Add(cuenta);
            }
            conexion.FinConsulta();
            mensaje.Destinatarios = destinatarios;
        }

        public override List<OPersistente> TraerLista(OPersistente o)
        {
            List<OPersistente> lista = new List<OPersistente>();
            Mensaje mensaje = (Mensaje)o;
            string sentencia = "SELECT * FROM MENSAJE";
            conexion.TraerDatos(sentencia);
            while (conexion.SiguienteRegistro())
            {
                mensaje = new Mensaje();
                mensaje.Oid = conexion.ObtenerValor(0).ToString();
                mensaje.CarpetaPadre.Oid = conexion.ObtenerValor(1).ToString();
                mensaje.Asunto = conexion.ObtenerValor(2).ToString();
                mensaje.Contenido = conexion.ObtenerValor(3).ToString();
                mensaje.Leido = (Boolean)conexion.ObtenerValor(4);
                lista.Add(mensaje);
            }
            conexion.FinConsulta();
            return lista;
        }
    }
}
